import dayjs from 'dayjs';

/**
 * 根据时间判断属于哪一个时间段：凌晨、上午、中午、下午、晚上
 * @param date 可选，默认为当前时间
 * @returns 时间段字符串
 */
export function getTimePeriod(date: Date = new Date()): '凌晨' | '上午' | '中午' | '下午' | '晚上' {
  const hour = date.getHours();

  if (hour >= 0 && hour < 6)
    return '凌晨';
  if (hour >= 6 && hour < 12)
    return '上午';
  if (hour === 12)
    return '中午';
  if (hour > 12 && hour < 18)
    return '下午';
  return '晚上'; // 18:00 - 23:59
}

export function getAge(birthday: string | Date): number {
  const birth = dayjs(birthday);
  const today = dayjs();

  let age = today.year() - birth.year();

  // 如果今年的生日还没到，就减去 1
  if (
    today.month() < birth.month()
    || (today.month() === birth.month() && today.date() < birth.date())
  ) {
    age--;
  }

  return age;
}

// 从身份证中提取生日
export function extractBirthday(idCard: string): string {
  if (idCard.length === 18) {
    return `${idCard.substring(6, 10)}-${idCard.substring(10, 12)}-${idCard.substring(12, 14)}`;
  }
  return '';
}

/**
 * 根据选择的日期判断 这个时间段是否可选择
 * @param selectedDate 选择的日期 dayjs.Dayjs
 * @param time 某个时间段的结束时间
 */
export function checkTimeAvailable(selectedDate: dayjs.Dayjs, time: string) {
  const today = dayjs();

  if (!today.isSame(selectedDate, 'day')) {
    // 不是今天 → 只能选择未来日期
    return selectedDate.isAfter(today, 'day');
  }

  // 是今天 → 判断当前时间是否在这个时间段之前
  const target = dayjs(time, 'HH:mm');
  return today.isBefore(target, 'minute');
}

/**
 * 将秒数格式化为 “X小时X分X秒”
 * @param duration 总秒数
 */
export function formatDuration(duration: number): string {
  const hours = Math.floor(duration / 3600);
  const minutes = Math.floor((duration % 3600) / 60);
  const seconds = duration % 60;

  const parts: string[] = [];
  if (hours)
    parts.push(`${hours}小时`);
  if (minutes)
    parts.push(`${minutes}分钟`);
  if (seconds || parts.length === 0)
    parts.push(`${seconds}秒`);

  return parts.join('');
}
